package com.wing.file.service;

import com.wing.file.model.response.FileVO;
import com.wing.file.util.FileType;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.List;

/**
 * @Description: Minio文件上传service
 * @Project: szgc
 * @Package: com.wing.file.service.MinIOFileStorageService
 * @Date: 2025/04/28 14:16
 * @Author: heZhou
 * @Version: 1.0
 */
public interface MinIOFileStorageService extends AbstractService{

    @Override
    FileVO uploadFile(MultipartFile file, String path) throws Exception;

    /**
     * 批量上传
     * @param file
     * @param path
     * @return
     * @throws Exception
     */
    @Override
    List<FileVO> uploadMultipartFile(MultipartFile[] file, String path) throws Exception;

    @Override
    FileType getFileType();


    /**
     * 上传图片文件
     *
     * @param prefix      文件前缀
     * @param filename    文件名
     * @param inputStream 文件流
     * @return 文件url
     */
    String uploadImgFile(String prefix, String filename, InputStream inputStream);

    /**
     * 上传html文件
     *
     * @param prefix      文件前缀
     * @param filename    文件名
     * @param inputStream 文件流
     * @return 文件url
     */
    String uploadHtmlFile(String prefix, String filename, InputStream inputStream);

    /**
     * 上传文件不分类型
     *
     * @param prefix        文件前缀
     * @param filename      文件名
     * @param multipartFile 文件
     * @return 文件url
     */
    String uploadFileByMultipartFile(String prefix, String filename, MultipartFile multipartFile);

    /**
     * 上传本地文件
     *
     * @param prefix     文件前缀
     * @param objectName 对象名称
     * @param fileName   本地文件路径
     */
    String uploadFile(String prefix, String objectName, String fileName);


    /**
     * 下载文件url到本地指定路径
     *
     * @param fileUrl 文件url
     * @param templatePath 指定路径文件夹
     * @return path 本地文件全路径
     */
    String downloadFile(String fileUrl, String templatePath);

    /**
     * 下载文件
     *
     * @param fileUrl 文件url
     * @return
     */
    void downloadFile(String fileUrl, HttpServletResponse response);

    /**
     * 删除文件
     *
     * @param fileUrl 文件url
     */
    void deleteFile(String fileUrl);

    /**
     * 获取文件夹中的所有文件列表
     * @param path
     * @return
     */
    List<FileVO> listObjects(String path);
}
